Executing programs based on user-specified constraints

ABSTRACT

Techniques are described for managing execution of programs on multiple computing systems, such as based at least in part of user-specified constraints. For example, constraints related to execution of a program may be based on a desired relative location of a host computing system to execute a copy of the program with respect to an indicated target (e.g., computing systems executing other copies of the program or copies of another indicated program), on particular geographic locations, and/or on factors not based on location (e.g., cost of use of a particular computing system, capabilities available from a particular computing system, etc.). Some or all of the multiple computing systems may be part of a program execution service for executing multiple programs on behalf of multiple users, and each may provide multiple virtual machines that are each capable of executing one or more programs for one or more users.

CROSS REFERENCE TO RELATED APPLICATIONS

This application is a continuation-in-part of U.S. application Ser. No.11/395,463, filed Mar. 31, 2006 and entitled “Managing Execution ofPrograms by Multiple Computing Systems,” which is hereby incorporated byreference in its entirety.

TECHNICAL FIELD

The following disclosure relates generally to managing execution ofprograms on multiple computing systems based at least in part onuser-specified constraints.

BACKGROUND

Data centers housing significant numbers of interconnected computingsystems have become commonplace, such as private data centers that areoperated by and on behalf of a single organization, and public datacenters that are operated by entities as businesses to provide computingresources to customers. For example, some public data center operatorsprovide network access, power, and secure installation facilities forhardware owned by various customers, while other public data centeroperators provide “full service” facilities that also include hardwareresources made available for use by their customers. However, as thescale and scope of typical data centers has increased, the task ofprovisioning, administering, and managing the physical computingresources has become increasingly complicated.

The advent of virtualization technologies for commodity hardware hasprovided a partial solution to the problem of managing large-scalecomputing resources for many customers with diverse needs, allowingvarious computing resources to be efficiently and securely sharedbetween multiple customers. For example, virtualization technologiessuch as those provided by VMWare, XEN, or User-Mode Linux may allow asingle physical computing machine to be shared among multiple users byproviding each user with one or more virtual machines hosted by thesingle physical computing machine. Each such virtual machine may be asoftware simulation acting as a distinct logical computing system thatprovides users with the illusion that they are the sole operators andadministrators of a given hardware computing resource, while alsoproviding application isolation and security among the various virtualmachines. Furthermore, some virtualization technologies are capable ofproviding virtual resources that span one or more physical resources,such as a single virtual machine with multiple virtual processors thatactually spans multiple distinct physical computing systems.

While the availability of data centers and virtualization technologieshas provided various benefits, various problems still exist. Forexample, one problem that arises in the context of data centers thathost large numbers of programs for a set of diverse customers on largenumbers of physical computing systems involves managing the execution ofprograms for customers in such a manner as to meet customer expectationswhile also making efficient use of the computing systems. For example, afirst customer may desire that at least some of his/her programs beexecuted in widely distributed locations, so that a failure of a singlephysical computing system or of connectivity to a particular data centerdoes not cause access to all of those programs to be lost. Conversely, asecond customer may desire that at least some of his/her programs beexecuted close to each other so that network connectivity between theprograms is likely to have desired performance characteristics (e.g.,low latency, high throughput, etc.). In addition, particular customersmay desire particular capabilities for computing systems that executeparticular programs, with some capabilities being available from only asubset of the computing systems. However, it is difficult for customersto specify such expectations—for example, a customer may need to obtaininformation about all of the possibly available computing systems (e.g.,their locations and capabilities), and repeatedly execute programs byidentifying a particular computing system whose capabilities andlocation is appropriate for execution of a particular program and bymanually requesting that the particular computing system be used toexecute the program, which is highly time-consuming and inefficient. Inaddition, it is difficult for an operator of one or more data centers toefficiently satisfy such customer expectations—for example, if acustomer requests that a particular computing system be used to executea particular program, the operator may be unable to satisfy the request(e.g., that computing system may be currently unavailable, or would beoverloaded if used as requested), while other available computingsystems that would also be appropriate may be under-utilized.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a network diagram illustrating an example embodiment in whichmultiple computing systems execute programs and inter-communicate.

FIG. 2 is a block diagram illustrating example computing systemssuitable for executing an embodiment of a system for managing executionof programs by a program execution service.

FIGS. 3A and 3B illustrate a flow diagram of an example embodiment of aSystem Manager routine.

FIG. 4 illustrates a flow diagram of an example embodiment of a SystemClient routine.

DETAILED DESCRIPTION

Techniques are described for managing execution of programs on multiplecomputing systems, such as based at least in part of user-specifiedconstraints related to the program execution. The user-specifiedconstraints may have various forms in various embodiments, as discussedbelow. In addition, in at least some embodiments, at least some of thecomputing systems are part of a program execution service for executingmultiple programs on behalf of multiple users of the service, such as aprogram execution service that uses multiple computing systems onmultiple physical networks (e.g., multiple physical computing systemsand networks within one or more data centers in one or more geographicallocations), and at least some of the computing systems each may providemultiple virtual machines that are each capable of executing one or moreprograms for one or more users. In at least some embodiments, thedescribed techniques are automatically performed by an embodiment of aSystem Manager component to manage execution of programs for a programexecution service or other group of multiple computing systems thatexecute programs, as described in greater detail below.

In at least some embodiments, specified requirements or otherconstraints related to execution of one or more copies of a programinclude constraints based on a desired relative location of one or moreindicated targets to one or more host computing systems to execute theone or more program copies, such as constraints specified by a user forexecution of one or more programs for the user. A desired relativelocation to an indicated target may be specified in various ways invarious embodiments, and indicated targets may have various forms invarious embodiments.

As one illustrative example, a particular user may desire tosimultaneously execute multiple copies of a first program (e.g., to actas alternatives in providing functionality to clients of the firstprogram), with the user desiring that the multiple program copies eachbe executed on a distinct host computing system that is sufficientlydistant from other host computing systems executing copies of theprogram so as to provide a desired level of reliability in case of afailure event that affects access to one or more of the executingprogram copies (e.g., a hardware failure of one of the host computingsystems executing a program copy, a failure of a networking deviceconnecting multiple computing systems, failure of power and/or networkconnectivity to a data center having numerous computing systems, etc.),such as to minimize the risk that access to all of the multipleexecuting program copies will be simultaneously lost due to the failureevent. In such a situation, the indicated targets are the host computingsystems executing other copies of the program, and the relative locationmay be specified as exceeding an indicated degree of proximity orcloseness (e.g., as a minimum distance) between the various target hostcomputing systems for the program copies, such as to have at least two(or all) of those host computing systems be connected via a differentnetwork switch device, be located in different data centers, be locatedin different geographic areas, etc.

Furthermore, the same user may desire to also simultaneously executemultiple copies of a second program, with the second program copies eachconfigured to interact during execution with at least one of theexecuting first program copies. For example, the first and secondprograms may be part of a multi-tier architecture, such as with thefirst program being an application server program that interacts with adatabase server program to obtain relevant data (e.g., as part ofimplementing business logic for a particular Web site or othernetwork-based service), and with the second program being the databaseserver program that provides access to data. One or more other relatedprograms may also optionally be part of such a multi-tier architecture,such as a front-end Web server program that interacts with Web clientsto receive requests and with the application server program to obtainresponses to the requests. In such situations, the user may similarlydesire that the copies of the second program execute on distinct hostcomputing systems that are sufficiently non-proximate from each other tominimize reliability problems due to failure events, but further thateach executing copy of the second program is sufficiently proximate toat least one executing copy of the first program so that communicationsbetween such first program copies and second program copies have atleast a minimum level of desired network connectivity performance (e.g.,a maximum amount of latency, a minimum amount of throughput or availablebandwidth, etc.). In such a situation, the indicated targets for a hostcomputing system to execute a second program copy may include one ormore target host computing systems that execute other copies of thesecond program, and may further include one or more target hostcomputing systems that execute copies of the first program. Furthermore,the relative location with respect to target host computing systemsexecuting other second program copies may similarly be specified asexceeding an indicated degree of proximity (e.g., a minimum distance),while the relative location with respect to a target host computingsystem executing a first program copy may be specified as being within aminimum degree of proximity (e.g. a maximum distance), such as to havethe two computing systems be located in the same data center, to beconnected via a single network router device (e.g., on differentswitched sub-networks), to be the same computing system executing bothprograms concurrently, etc.

Constraints related to execution of one or more copies (or “instances”)of a program on one or more host computing systems at desired locationsrelative to one or more indicated targets may be specified in variousways, such as based at least in part on a hierarchy or otherorganization of multiple host computing systems that are available toexecute program copies. As previously noted, in some embodiments, aprogram execution service may execute software programs on behalf ofthird-party users who are customers of the program execution service,such as by using multiple physical host computing systems (e.g., in oneor more data centers in one or more geographic areas, and with at leastsome of the host computing systems each providing multiple virtualmachines each able to execute one or more programs for a customer). Insuch situations, the organization of the host computing systems of theprogram execution service may be used to specify relative locations forhost computing systems to execute particular program copies, asdiscussed below. In addition, satisfaction of such specified constraintsmay be automatically performed by a System Manager component of such aprogram execution service that manages execution of programs ofcustomers, such as to execute customers' programs in accordance withconstraints specified by the customers. For example, customers mayprovide programs to be executed to the execution service, and mayreserve or otherwise request execution time and other resources onphysical or virtual hardware facilities provided by the executionservice. Additional details related to example embodiments of such aprogram execution service are included below, including with respect toFIGS. 1 and 2.

In embodiments in which multiple computing systems are available toexecute programs and are inter-connected in various ways (e.g., multiplecomputing systems associated with a program execution service, oranother group of such multiple computing systems), a hierarchy or otherorganization of the multiple computing systems may be specified at leastin part based on the type of data exchange mediums or other networkconnectivity provided between the multiple computing systems. Forexample, in some embodiments, a user may be able to select one or moreof multiple defined proximity levels in order to indicate a desiredrelative location between a host computing system to be selected toexecute a program copy and an indicated target computing system or othertarget computing resource, such as the following illustrative proximitylevels:

a first proximity level corresponding to the host computing system andthe target computing system being the same, such as to enable two ormore programs on the computing system to inter-communicate via memory;

a second proximity level corresponding to the host and target computingsystems being connected by a network switch device and/or by being on asingle rack, such as to enable programs on the host and target computingsystems to inter-communicate via the switch and/or via a backplane orother bus of the rack;

a third proximity level corresponding to the host and target computingsystems being connected by one or more network router devices (e.g., anedge aggregation router, or other router that inter-connects multipleswitches or racks), such as to enable programs on the host and targetcomputing systems to inter-communicate via the router(s);

a fourth proximity level corresponding to the host and target computingsystems being connected by a network local to a data center, such as toenable programs on the host and target computing systems tointer-communicate via the local network;

a fifth proximity level corresponding to the host and target computingsystems being connected by one or more high-speed dedicated dataconnections between a ring of two or more data centers (e.g., datacenters in a common geographical area, such as a state or region), suchas to enable programs on the host and target computing systems tointer-communicate via the high-speed data connections; and

a sixth proximity level corresponding to the host and target computingsystems being in different data centers that are in different geographicareas (e.g., in different states or countries), such as to enableprograms on the host and target computing systems to inter-communicatevia the Internet or other connection between the data centers.

Each such proximity level may be considered to reflect a distinctassociated degree of proximity between the host and target computingsystems (e.g., physical proximity and/or network connectivity proximity)and a degree of reliability in case of occurrence of a failure event,with the first level having the highest degree of proximity and havingthe lowest degree of reliability, and the sixth level having the lowestdegree of proximity and the highest degree of reliability. A user mayselect one or more such proximity levels in various ways in variousembodiments, such as by indicating a particular proximity level, orinstead a range of multiple proximity levels (e.g., based on anindicated minimum desired degree of proximity and/or an indicatedmaximum desired degree of proximity), optionally with an indicatedpreference to maximize or minimize proximity (or reliability) within therange if possible. It will be appreciated that other embodiments mayhave additional proximity levels, may lack some or all of theillustrative proximity levels, or may represent relative locations inmanners other than such proximity levels. Furthermore, it will beappreciated that in at least some embodiments some or all of theproximity levels may be hierarchical, such that a group of computingsystems at a second proximity level may include one or more groups ofcomputing systems at a first proximity level, a group of computingsystems at a third proximity level may include one or more groups ofcomputing systems at a second proximity level, etc. In addition, in someembodiments, an indication of a proximity level (or other related degreeof proximity) may correspond not to a physical degree of proximity basedon distance or network connectivity, but instead to a level of qualityof service or other computing performance (e.g., reliability in case ofa failure event, network connectivity performance, etc.) that isprovided for a host computing system selected for that proximity level,regardless of whether that level of computing performance is providedbased on a physical degree of proximity or in another manner.

As previously noted, a relative location may be determined with respectto various types of target computing systems in various ways. Forexample, constraints may be specified with respect to computing systemsexecuting multiple copies of a single program and/or to computing systemexecuting copies of multiple programs, such as to locate an executingprogram copy providing computing functionality near an executing programcopy providing related storage functionality (e.g., to locate anexecuting application server program copy near an executing databaseserver program copy). In other embodiments, other types of targets maybe indicated and used, such as to execute one or more program copieswithin a specified geographical distance or other degree of proximity toan indicated location (e.g., to execute a program copy for a company orother entity near other computing resources maintained by the entity,such as near a corporate headquarters for a company, and/or near alocation in which end-users of a particular program are located). Inaddition, in some embodiments a target may correspond to a geographicalarea (e.g., as defined by a governmental body, such as a city, county,state, country, region, etc.), and the relative location may refer to ahost computing system being selected to be inside or outside theboundaries of that geographical area (e.g., due to legal restrictions,so as to enhance functionality provided to end-users of a particularprogram located in that geographical area, etc.).

In addition, in some embodiments at least some constraints specified bya user or otherwise considered by a System Manager component whenselecting a host computing system for an executing program copy may berelated to factors other than location. For example, a particular usermay specify constraints related to capabilities of a host computingsystem that is to be selected to execute a program of the user, such asresource criteria related to execution of each copy of the program(e.g., an amount of memory, an amount of processor usage, an amount ofnetwork bandwidth, and/or an amount of disk space), and/or specializedcapabilities available only on a subset of multiple computing systemsused to execute programs (e.g., particular input/output devices;particular programs, such as an operating system and/or applicationprograms, etc.). In addition, in some embodiments, a particular user mayspecify constraints related to costs, such as based on a pricing planselected by the user (e.g., so that only computing systems availablewithin that pricing plan are selected), or on other fees associated withuse of particular computing systems. In addition, a System Managercomponent may also select and use various constraints related to programexecution (e.g., to enhance operation of a program execution service oruse of another group of multiple computing systems executing programs)in at least some embodiments, such as related to a quantity of computingsystem resources that a particular user may use (e.g., not more thanhalf of a particular host computing system that provides multiplevirtual machines, at most a specified number or percentage of computingsystems in a data center or of all of the multiple computing systems,etc.), related to locations of computing systems used for particularusers or particular programs, related to particular computing systemsthat particular users may use, etc. Various other types of constraintsmay similarly be specified by users and/or by a System Manager componentin at least some embodiments.

In at least some embodiments, the execution of one or more programcopies on one or more computing systems may be initiated in response toa current execution request for immediate execution of those programcopies by a user. Alternatively, the program copy execution may beinitiated in other manners in other embodiments, such as based on apreviously received program execution request that scheduled orotherwise reserved the then-future execution of those program copies forthe now-current time. Program execution requests may be received invarious ways, such as directly from a user (e.g., via an interactiveconsole or other GUI provided by the program execution service), or froman executing program of a user that automatically initiates theexecution of one or more copies of other programs or of itself (e.g.,via an API, or application programming interface, provided by theprogram execution service, such as an API that uses Web services).

In addition to constraint-related information, program executionrequests may include various other information to be used in theinitiation of the execution of one or more program copies in at leastsome embodiments, such as an indication of a program that was previouslyregistered or otherwise supplied for future execution, and a number ofcopies of the program that are to be executed simultaneously (e.g.,expressed as a single desired number of copies, as a minimum and maximumnumber of desired copies, etc.). Furthermore, in some embodiments,program execution requests may include various other types ofinformation, such as the following: an indication of a user account orother indication of a previously registered user (e.g., for use inidentifying a previously stored program and/or in determining whetherthe requested program copy execution is authorized); an indication of apayment source for use in providing payment to the program executionservice for the program copy execution; an indication of a prior paymentor other authorization for the program copy execution (e.g., apreviously purchased subscription valid for an amount of time, for anumber of program execution copy, for an amount of resource utilization,etc.); and/or an executable or other copy of a program to be executedimmediately and/or stored for later execution. In addition, in someembodiments, program execution requests may further include a variety ofother types of preferences and/or requirements for execution of one ormore program copies, such as that some or all of the program copies eachbe allocated indicated resources during execution.

When one or more constraints are identified to be used for selecting ahost computing system to execute a copy of a program, whether asspecified by a user or otherwise determined, the System Managercomponent uses the identified constraint(s) to select an appropriatehost computing system if possible. In particular, in the illustratedembodiment, the System Manager component first attempts to determine oneor more candidate host computing systems that are available to executethe program copy and that satisfy the identified constraint(s), such asby incrementally applying the identified constraint(s) to multiplepossible computing systems in such a manner as to eliminate any of themultiple computing systems that do not satisfy one of the constraints.In other embodiments, other types of constraint satisfaction techniquesmay instead be used. In addition, in the illustrated embodiment, theSystem Manager component may also apply other factors when determiningany candidate host computing systems, such as to eliminate fromconsideration any computing systems that lack sufficient resources tocurrently execute the program copy (e.g., based on one or more otherprograms being executed or that are scheduled to be executed), and/orthat are currently unavailable or expected to be unavailable for otherreasons (e.g., periodic maintenance).

If one or more candidate host computing systems are determined, one ofthe candidate host computing systems is selected as the host computingsystem to execute the program copy (or multiple host computing systemsmay be selected if multiple program copies are to be executed on morethan one host computing system). If multiple candidate host computingsystems are determined, the particular host computing system may beselected in various ways, such as randomly, or in such a manner as toenhance operation of the program execution service (e.g., by attemptingto use under-utilized groups of computing systems, by using a computingsystem that has a lowest cost of operation, etc.). In some embodiments,a user who specified the identified constraints may further have one ormore preferences that may be used to select the host computing system,whether a preference indicated with a program copy execution requestthat specified the identified constraints and initiated the candidatehost computing system determination, or a previously specified andstored preference. For example, if the specified constraints include arange of multiple proximity levels, the user may specify a preference asto which end of the range to use if possible, such as to prefer toselect the host computing system to be more proximate or less proximateto a target (or more reliable or less reliable) if possible.

If no candidate host computing systems are determined, an error or otherindication may be returned to provide notification that no computingsystems that satisfy the identified constraint(s) are currentlyavailable to execute the program copy. If the identified constraint(s)were specified by a user, the user may then decide to request executionof the program copy using other constraints (e.g., less restrictiveconstraints, such as with a less restrictive degree of proximity), or toinstead attempt to perform the program execution using the sameconstraints at a later time. In other embodiments, the System Managercomponent may further facilitate such constraint relaxation, such as byautomatically determining one or more less restrictive constraints underwhich the program copy may be executed (e.g., if at least one of theconstraints indicates a maximum proximity level that is less than thehighest proximity level, by progressively trying to use proximity levelshigher than the indicated maximum until one or more available candidatehost computing systems are determined) and providing an indication ofthe ability to perform the program copy execution using the lessrestrictive constraints. Alternatively, the System Manager component mayautomatically determine a later time at which the program copy may beexecuted on a host computing system under the identified constraints(e.g., based on scheduled executions of other program copies), andindicate that availability (e.g., enabling a user to schedule theprogram copy execution at that later time).

Furthermore, in some embodiments the System Manager component maydetermine to move at least some executing programs in at least somesituations from their current host computing systems to other hostcomputing systems, such as if no candidate host computing systems isdetermined for a particular program copy execution request, if acomputing system fails or access is otherwise lost to one or morecomputing systems, if an executing program copy terminates prematurely,periodically, etc. If so, the System Manager component may, for one ormore program copies already executing on a current host computingsystem, determine another host computing system to execute the programcopy instead of the current host computing system such that the otherhost computing system satisfies any constraints related to execution ofthe program copy (e.g., at a same or better level with respect to anyuser preferences regarding the program copy execution, or instead at anylevel that satisfies the constraints), and optionally such that one ormore other system goals are achieved (e.g., to make available acandidate host computing system for a program copy execution request bymoving a previously executing program copy on that candidate hostcomputing system to another host computing system, to improveutilization of at least some computing systems, etc.).

In addition, in some embodiments a user may specify constraints to beused for a particular request to execute a copy of a program byindicating a predefined group of constraints, such as a group previouslydefined by the user (e.g., so that the group may be re-used multipletimes, such as for multiple copies of a single program or for multipledistinct programs). Alternatively, in some embodiments, multiplepredefined groups may be provided by the System Manager component forthe program execution service or other group of multiple computingsystems being managed, such as the following non-exclusive list ofexample predefined groups: a group corresponding to providing highfailure reliability for multiple copies of a program, a groupcorresponding to providing high network connectivity performance betweenmultiple copies of a program, a group corresponding to providing a highdegree of proximity between multiple copies of a program, one or moregroups that each correspond to a particular geographical area and/or aparticular subset of the multiple computing systems available to executeprograms, etc., and with some or all such groups optionally furtherspecifying a preference for greater proximity and/or for less proximitywithin a corresponding range. Thus, if a user expects to executemultiple copies of a program (e.g., by initiating executions of all ofthe copies at a single time or instead incrementally), and would likethem to execute in particular locations relative to each other, the usermay in at least some embodiments define or select a group of one or moreconstraints that correspond to those desired relative locations, andthen execute each copy of the program as part of that defined/selectedgroup. Furthermore, in some embodiments, a user may define multiple suchgroups of constraints, and further specify one or more constraintsbetween such groups. Thus, with respect to the previously discussedillustrative example involving an application server program and adatabase server program, a user may define a first group correspondingto execution of multiple copies of the application server program and asecond group corresponding to execution of multiple copies of theapplication server program, and indicate inter-group constraints for thetwo groups (e.g., to indicate a minimum degree of proximity betweenexecuting program copies of the two groups, such as to ensure sufficientproximity between copies of the two programs).

For illustrative purposes, some embodiments are described below in whichspecific types of computing systems, networks, intercommunications, andconfiguration operations are performed. These examples are provided forillustrative purposes and are simplified for the sake of brevity, andthe inventive techniques can be used in a wide variety of othersituations, some of which are discussed below. For example, while thedescribed techniques are in some embodiments used in the context of oneor more data centers housing multiple physical computing systems and/orin the context of a program execution service, other implementationscenarios are also possible, such as in the context a business or otherentity (e.g. a university, non-commercial organization, etc.) for thebenefit of its employees and/or members.

FIG. 1 is a network diagram illustrating an example embodiment in whichintercommunications between computing systems of a program executionservice are configured by a system manager component of the programexecution service. The illustrated example includes a data center 100operated by the program execution service that is connected to a globalinternet 135 external to the data center 100. The global internet 135may be a publicly accessible network of networks, possibly operated byvarious distinct parties, such as the Internet. In this example, theglobal internet 135 provides access to various external computingsystems, such as computing systems 145 a via private network 140 andcomputing systems 145 b. The private network 140 may be, for example, acorporate network that is wholly or partially inaccessible fromnon-privileged computing systems external to the private network 140.Computing systems 145 b may include, for example, a home computingsystem that connects directly to the Internet (e.g., via a telephone orcable modem, a Digital Subscriber Line (“DSL”), etc.). In addition,other data centers are illustrated, including one or more other datacenters 185 that are connected to data center 100 via one or morededicated private high-speed data connections 180 (e.g., other datacenters that are part of a ring of multiple data centers that includedata centers 100 and 185, such as in a common geographic area), and oneor more other data centers 190 that are connected to data center 100 viathe internet 135 (e.g., other data centers that are geographicallydistant from data center 100).

The data center 100 includes a number of physical host computing systems105 a-105 e and a System Manager component 110 of the program executionservice. In this example, host computing system 105 a includes multiplevirtual machines 107 a and a virtual machine (“VM”) Manager component109 a to manage those virtual machines (e.g., a hypervisor or othervirtual machine monitor), and some or all of the other host computingsystems 105 b-105 e may similarly have such virtual machines and/or VMManager components (not shown). Alternatively, in other embodiments,some or all of the physical host computing systems at the data centermay not provide any virtual machines, such as to instead directlyexecute one or more software programs on behalf of a customer of theprogram execution service. Furthermore, in some embodiments various ofthe host computing systems may have differing capabilities, may havedifferent associated fees for use, may support different types of userprograms (e.g., virtual machine program instances of different sizes, orprograms with different types of resource criteria and/or computingresource usage, such as differing patterns of I/O and memory access andnetwork usage), etc. If so, particular users and/or their programs maybe grouped (e.g., automatically) according to one or more such factors,which may further be used as constraints and/or preferences regardingwhich host computing systems to select for particular program copies.

The data center further includes multiple networking devices, such asswitches 115 a and 115 b-115 n, edge routers 125 a-125 c, and corerouters 130 a-130 c. Switch 115 b is part of a physical network thatincludes two or more physical host computing systems 105 a-105 b, and isconnected to edge aggregation router 125 b. Edge aggregation router 125b connects the switched network for switch 115 b to an interconnectionnetwork 120 of the data center, and further in the illustratedembodiment connects one or more other switches 115 n (and their switchednetworks of host computing systems 105 c) to each other, to switch 115b, and to the interconnection network. Switch 115 a is part of adistinct physical network that includes physical computing systems 105d-105 e and a computing system providing the PES System Managercomponent 110, and is connected to edge router 125 a. Numerous othercomputing systems and networking devices, including other switchesconnected to edge router 125 a, may be present, but are not illustratedhere for the sake of brevity. The physical networks established byswitch 115 a and by switches 115 b-115 n are connected to each other andother networks (e.g., the global internet 135) via the interconnectionnetwork 120, which includes the edge routers 125 a-125 c and the corerouters 130 a-130 c. The edge routers 125 a-125 c provide gatewaysbetween two or more networks. For example, edge router 125 a provides agateway between the physical network established by switch 115 a and theinterconnection network 120. Edge router 125 c provides a gatewaybetween the interconnection network 120 and global internet 135, as wellas to the dedicated high-speed data connection 180. The core routers 130a-130 c manage communications within the interconnection network 120,such as by forwarding packets or other data transmissions as appropriatebased on characteristics of such data transmissions (e.g., headerinformation including source and/or destination addresses, protocolidentifiers, etc.) and/or the characteristics of the interconnectionnetwork 120 itself (e.g., routes based on network topology, etc.).

The illustrated PES System Manager component 110 performs at least someof the described techniques in order to manage execution of programs onthe physical host computing systems 105 a-105 e, as described in greaterdetail elsewhere. When a particular host computing system is selected toexecute one or more program copies, the System Manager component may insome embodiments initiate execution of those program copies byinteracting with a VM Manager component (or other manager component ifthe selected host computing system does not provide virtual machines)that controls execution of programs for that selected host computingsystem for the program execution service, or may alternatively directlyexecute the program copy on the selected host computing system.

FIG. 2 is a block diagram illustrating example computing systemssuitable for executing an embodiment of a system for managing executionof programs on multiple host computing systems. In particular, FIG. 2illustrates an example data center 299 that provides a program executionservice. The data center 299 includes a Program Execution Service(“PES”) System Manager computing system 200, a host computing system 250capable of executing user programs on virtual machines 258, and otherhost computing systems 290 a-290 n capable of executing user programs(e.g., with at least some of the host computing systems 290 a-290 n eachsimilarly providing one or more virtual machines and/or each executing asingle user program at a time). The PES System Manager computing system200 and host computing systems 250 and 290 a-290 n are connected to oneanother via an internal network 280 and various networking devices thatinclude an illustrated networking device 262 and network switch devices260 a-260 n. The network 280 may, for example, be an interconnectionnetwork that joins multiple disparate physical networks within the datacenter 299 and possibly provides access to external networks and/orsystems, such as computing systems 295 (e.g., in one or more other datacenters) via external network 285 (e.g., the Internet). In theillustrated example, the networking device 262 provides a gatewaybetween the network 280 and host computing systems 250 and 290 a-290 n,such as by acting as a router or a bridge.

The PES System Manager computing system 200 functions to manage theexecution of user programs within the data center 299. The illustratedPES System Manager computing system embodiment 200 includes a CPU 205,various I/O components 210, storage 230, and memory 220. The illustratedI/O components include a display 211, network connection 212,computer-readable media drive 213, and other I/O devices 215 (e.g., amouse, keyboard, speakers, microphone, etc.).

Host computing system 250 functions to host one or more programs beingexecuted on behalf of one or more customers, and is shown in additionaldetail relative to host computing systems 290 a-290 n for illustrativepurposes. The host computing system 250 includes a CPU 252, I/Ocomponents 253, storage 251, and memory 255. A host computing systemmanager component 256 is executing in the memory 255, and one or moreuser programs may also be executing in the multiple virtual machines 258in memory. The structure of the other host computing systems 290 a-290 nmay be similar to that of host computing system 250. In a typicalarrangement, data center 299 may include hundreds or thousands of hostcomputing systems such as those illustrated here, organized into a largenumber of distinct physical networks (e.g., in a hierarchical manner).

An embodiment of a PES System Manager component 240 is executing inmemory 220. In some embodiments, the System Manager component 240 mayreceive a request or other indication from a user (e.g., using one ofthe other computing systems 295) to execute one or more copies of aprogram in accordance with one indicated execution constraints. TheSystem Manager component 240 may then attempt to identify or otherwisedetermine one or more candidate host computing systems based on theexecution constraints, such as from the host computing systems of thedata center 299 and/or from host computing systems on one or more otherdata centers (not shown), such as by interacting with System Managercomponents on those other data centers or instead by directly managingthe host computing systems for multiple data centers. After identifyingone or more candidate host computing systems, the System Managercomponent selects one or more particular host computing systems toexecute the one or more program copies for the user. In some cases, theSystem Manager component may use various information when determiningcandidate host computing systems and selecting particular host computingsystems, such as information about the structure or other organizationof the various host computing systems, such as may be stored in a hostprovisioning database (“DB”) data structure 232 on storage 230, and/orinformation about customer users (e.g., customer preferences,customer-defined constraint groups, information about customers'programs, etc.), such as may be stored in a customer informationdatabase data structure 234 on storage 230.

It will be appreciated that computing systems 200, 250, 290 a-290 n, and295, and networking devices 260 a-260 n and 262, are merely illustrativeand are not intended to limit the scope of the present invention. Forexample, computing system 200 may be connected to other devices that arenot illustrated, including through one or more networks external to thedata center 299 such as the Internet or via the World Wide Web (“Web”).More generally, a computing system may comprise any combination ofhardware or software that can interact and perform the described typesof functionality, including without limitation desktop or othercomputers, database servers, network storage devices and other networkdevices, PDAs, cellphones, wireless phones, pagers, electronicorganizers, Internet appliances, television-based systems (e.g., usingset-top boxes and/or personal/digital video recorders), and variousother consumer products that include appropriate intercommunicationcapabilities. In addition, the functionality provided by the illustratedcomponents may in some embodiments be combined in fewer components ordistributed in additional components. Similarly, in some embodiments thefunctionality of some of the illustrated components may not be providedand/or other additional functionality may be available.

It will also be appreciated that, while various items are illustrated asbeing stored in memory or on storage while being used, these items orportions of them may be transferred between memory and other storagedevices for purposes of memory management and data integrity.Alternatively, in other embodiments some or all of the softwarecomponents and/or systems may execute in memory on another device andcommunicate with the illustrated computing system via inter-computercommunication. Furthermore, in some embodiments, some or all of thecomponents may be implemented or provided in other manners, such as atleast partially in firmware and/or hardware, including, but not limitedto, one or more application-specific integrated circuits (ASICs),standard integrated circuits, controllers (e.g., by executingappropriate instructions, and including microcontrollers and/or embeddedcontrollers), field-programmable gate arrays (FPGAs), complexprogrammable logic devices (CPLDs), etc. Some or all of the componentsand data structures may also be stored (e.g., as software instructionsor structured data) on a computer-readable medium, such as a hard disk,a memory, a network, or a portable media article to be read by anappropriate drive or via an appropriate connection. The components anddata structures may also be transmitted as generated data signals (e.g.,as part of a carrier wave or other analog or digital propagated signal)on a variety of computer-readable transmission mediums, includingwireless-based and wired/cable-based mediums, and may take a variety offorms (e.g., as part of a single or multiplexed analog signal, or asmultiple discrete digital packets or frames). Such computer programproducts may also take other forms in other embodiments. Accordingly,the present invention may be practiced with other computer systemconfigurations.

FIG. 3 illustrates a flow diagram of an example embodiment of a SystemManager routine 300. The routine may be provided by, for example,execution of the PES System Manager components 110 of FIG. 1 and/or 240of FIG. 2 in order to manage program execution for a program executionservice, or instead by a similar System Manager component to manageexecution of programs for another group of multiple computing systems(e.g., multiple computing systems of a business or other entity in orderto manage execution of internal programs for that entity).

The illustrated embodiment of the routine 300 begins at block 305, wherea request related to the execution of a program or a status messagerelated to program execution is received. In this embodiment, therequest may be received from various sources internal or external to theprogram execution service (e.g., a remote customer user requestingexecution of one or more copies of an indicated program). In block 310,the routine determines the type of request received.

If it is determined in block 310 that the request is to execute one ormore copies of a program, the routine continues with block 315. In block315, the routine determines one or more execution constraints related tothe program copy execution, such as based on constraints specified by auser as part of the request received in block 305 (e.g., by receiving anindication of a predefined group of constraints) and/or based onconstraints automatically determined as being beneficial to operation ofthe program execution service and/or for the user. The routine thencontinues to block 318 to attempt to identify one or more candidate hostcomputing systems that satisfy the determined execution constraints andare otherwise available to execute at least one of the program copies.If it is determined in block 320 that sufficient candidate hostcomputing systems are not available (e.g., at least one candidate hostcomputing system for each program copy), the routine may optionallyprovide an error or other status response (not shown) to the user fromwhom the request was received in block 305, and then continues to block330. Otherwise, the routine continues to block 322 to select one or moreof the candidate host computing systems to each execute at least onecopy of the program, and in block 325 initiates execution of thoseprogram copies on those selected host computing systems.

If it is instead determined in block 310 that the request received inblock 305 is to register a program of a user for later use (e.g., toprovide a copy of the program to the program execution service forstorage, to provide information about resource criteria for the program,to provide information about one or more predefined constraint groups towhich the program belongs, etc.), the routine continues to block 340. Inblock 340, the routine stores provided information about the program,and in block 345 optionally proceeds to provide one or more copies ofthe program to one or more distributed storage locations near to orotherwise associated with particular subsets of the host computingsystems (e.g., to local program caches at each of one or more datacenters). Alternatively, if it is determined in block 310 that therequest received in block 305 is for a user to define a constraint groupfor later use, the routine continues instead to block 355 to store anindication of the constraint group and any inter-group constraints. Ifit is instead determined in block 310 that a message is received inblock 305 with status information related to execution of programs byhost computing systems (e.g., periodic reports on amounts of resourceusage on various host computing systems, a report of a failure of acomputing system or other hardware device, a report of a failure of anexecuting program copy based on its early termination, etc.), theroutine continues instead to block 350 to store that status informationfor later use (e.g., for use in selecting particular host computingsystems). Otherwise, if it is instead determined in block 310 that someother type of request or message is received in block 305, the routinecontinues to block 365 to handle the request or message as appropriate.

After blocks 325, 345, 350, 355 or 365, the routine continues to block330 to optionally perform any periodic housekeeping operations (e.g., todetermine whether to move some executing program copies from currenthost computing systems to other host computing systems, such as tobalance utilization of resources or for other reasons). After block 330,the routine continues to block 395 to determine whether to continue, andif so returns to block 305. If not, the routine continues to block 399and ends.

FIG. 4 illustrates a flow diagram of an example embodiment of a clientroutine 400 of a program execution service, although in otherembodiments a similar routine may act as a client for one or more othergroups of multiple computing systems that may execute programs. Theroutine may be provided by, for example, an application (not shown)executing on one of the computing systems 145 of FIG. 1 or computingsystems 295 of FIG. 2, such as to provide an interactive console toallow a human user to interact with the program execution service.

The routine begins at block 405, where it receives instructions from auser or another type of message related to the execution of one or morecopies of one or more programs. In block 410, the routine determines thetype of the received message. If the message is related to registrationof a new program (or a new version of a previously registered program),the routine proceeds to block 415 and sends an indication of the newprogram to be registered to the program execution service (e.g., to aSystem Manager component of the program execution service that managesprogram execution). If the message is instead determined in block 410 tobe related to defining a constraint group for later use, the routineproceeds to block 420 to send a request to the program execution service(e.g., to a System Manager component of the program execution service)to define the constraint group, such as by indicating one or moreexecution constraints for the group and/or between the group and one ormore other constraint groups (e.g., individual constraints specified inaccordance with a defined API of the program execution service, such asby selecting from a list of constraints provided by the programexecution service and/or by specifying a constraint in a defined formatusing XML or other data format). If the message is instead determined inblock 410 to be related to the execution of a program, the routineproceeds to block 425 to send a request to the program execution service(e.g., to a System Manager component of the program execution service)to execute one or more copies of a program, such as with one or moreindicated execution constraints (e.g., individual constraints specifiedin accordance with a defined API of the program execution service, byselecting a predefined constraint group, etc.). If it is insteaddetermined in block 410 that some other type of request is received, theroutine proceeds to block 430 and performs other indicated operations asappropriate. For example, the routine may send a request to the programexecution service to reserve computing resources at a future time toexecute one or more indicated program copies, send a status query to theprogram execution service regarding current or prior execution of one ormore programs, provide or update user-related information (e.g., as partof registering the user with the program execution service), de-registeror otherwise remove previously registered programs, suspend or terminateexecution of one or more program copies, etc.

After blocks 415, 420, 425, or 430, the routine continues to block 470and optionally performs housekeeping tasks, such as to update displayinformation, store information received back from the program executionservice (not shown), make periodic status queries of the programexecution service, etc. After block 470, the routine proceeds to block495 to determine whether to continue. If so, the routine returns toblock 405, and if not, proceeds to block 499 and ends.

In addition, various embodiments may provide mechanisms for customerusers and other users to interact with an embodiment of the programexecution service (or other group of multiple computing systemsavailable to execute user programs) in various ways for purposes ofexecuting program copies and managing defined constraint groups. Forexample, as previously noted, some embodiments may provide aninteractive console (e.g. a client application program providing aninteractive user interface, a Web browser-based interface, etc.) fromwhich users can manage the creation or deletion of constraint groups, aswell as more general administrative functions related to the operationand management of hosted application programs or other programs (e.g.,the creation or modification of user accounts; the provision of newprograms; the initiation, termination, or monitoring of hosted programs;the assignment of programs to groups; the reservation of time or othersystem resources; etc.). In addition, some embodiments may provide anAPI that defines types of constraints that may be specified and/or thatallows other computing systems and programs to programmatically invokeat least some of the described functionality. Such APIs may be providedby libraries or class interfaces (e.g., to be invoked by programswritten in C, C++, or Java) and/or network service protocols such as viaWeb services. Additional details related to the operation of exampleembodiments of a program execution service with which the describedtechniques may be used are available in U.S. application Ser. No.11/394,595, filed Mar. 31, 2006 and entitled “Managing CommunicationsBetween Computing Nodes;” U.S. application Ser. No. 11/395,463, filedMar. 31, 2006 and entitled “Managing Execution of Programs by MultipleComputing Systems;” and U.S. application Ser. No. 11/692,038, filed Mar.27, 2007 and entitled “Configuring Intercommunications Between ComputingNodes;” each of which is incorporated herein by reference in itsentirety.

Those skilled in the art will also appreciate that in some embodimentsthe functionality provided by the routines discussed above may beprovided in alternative ways, such as being split among more routines orconsolidated into fewer routines. Similarly, in some embodimentsillustrated routines may provide more or less functionality than isdescribed, such as when other illustrated routines instead lack orinclude such functionality respectively, or when the amount offunctionality that is provided is altered. In addition, while variousoperations may be illustrated as being performed in a particular manner(e.g., in serial or in parallel) and/or in a particular order, thoseskilled in the art will appreciate that in other embodiments theoperations may be performed in other orders and in other manners. Thoseskilled in the art will also appreciate that the data structuresdiscussed above may be structured in different manners, such as byhaving a single data structure split into multiple data structures or byhaving multiple data structures consolidated into a single datastructure. Similarly, in some embodiments illustrated data structuresmay store more or less information than is described, such as when otherillustrated data structures instead lack or include such informationrespectively, or when the amount or types of information that is storedis altered.

From the foregoing it will be appreciated that, although specificembodiments have been described herein for purposes of illustration,various modifications may be made without deviating from the spirit andscope of the invention. Accordingly, the invention is not limited exceptas by the appended claims and the elements recited therein. In addition,while certain aspects of the invention are presented below in certainclaim forms, the inventors contemplate the various aspects of theinvention in any available claim form. For example, while only someaspects of the invention may currently be recited as being embodied in acomputer-readable medium, other aspects may likewise be so embodied.

1. A method for a computing system of a program execution service toexecute programs in locations selected in accordance with user-specifiedconstraints, the program execution service using a plurality of hostcomputing systems in multiple geographic areas to execute programs, theplurality of host computing systems being connected at multiplehierarchical levels that are each associated with a distinct degree ofproximity, the multiple hierarchical levels include a successionbeginning at a lowest hierarchical level whose associated degree ofproximity corresponds to multiple programs executing on a singlecomputing system and ending at a highest hierarchical level whoseassociated degree of proximity corresponds to multiple geographicallydistributed rings of computing data centers connected by the Internet,the succession including multiple intermediate hierarchical levels thatinclude a first switch-based hierarchical level whose associated degreeof proximity corresponds to a group of multiple computing systemsconnected by a switch-based common group data exchange medium that isspecific to that group, a router-based hierarchical level whoseassociated degree of proximity corresponds to a group of multipleswitch-based computing system groups connected by a router-based dataexchange medium, a data center-based hierarchical level whose associateddegree of proximity corresponds to a group of multiple router-basedcomputing system groups connected by a local area network of a datacenter, and a ring hierarchical level whose associated degree ofproximity corresponds to multiple geographically proximate data centersconnected by one or more dedicated high-speed data connections, themethod comprising: receiving an indication from a user of the programexecution service to execute an indicated quantity of copies of anindicated program in such a manner as to satisfy one or more indicatedexecution constraints, the indicated quantity of program copiesincluding multiple copies, the one or more execution constraints for useby the program execution service in selecting one or more of theplurality of host computing systems to execute the indicated quantity ofindicated program copies, the one or more execution constraintsspecifying one or more degrees of proximity of the selected one or morehost computing systems to one or more indicated other target computingsystems, the one or more execution constraints further specifying atleast one of a minimum and a maximum degree of proximity between atleast some of the computing systems executing the multiple indicatedprogram copies with the minimum proximity degree if specified being foruse in providing a minimum degree of reliability in case of a failurethat affects one or more of the executing multiple indicated programcopies and with the maximum proximity degree if specified being for usein providing a minimum degree of network connectivity performancebetween the executing indicated program copies of the at least somecomputing systems, the indicated target computing systems beingcomputing systems executing other copies of the indicated program;automatically determining one or more of the hierarchical levels whoseassociated degrees of proximity correspond to the one or more degrees ofproximity specified by the one or more execution constraints, theautomatic determining of the one or more hierarchical levels beingperformed by a configured computing system of the program executionservice; automatically determining one or more candidate host computingsystems that are available to execute the indicated quantity ofindicated program copies in accordance with the one or more executionconstraints, the candidate host computing systems being connected to theindicated target computing systems at one or more of the determinedhierarchical levels, the automatic determining of the one or morecandidate host computing systems being performed by the configuredcomputing system; automatically selecting from the candidate hostcomputing systems the one or more host computing systems to execute theindicated quantity of indicated program copies, such that each of theselected one or more host computing systems is to execute at least oneof the indicated program copies, the automatic selecting being performedby the configured computing system; and initiating executing of theindicated quantity of indicated program copies on the selected one ormore host computing systems.
 2. A computer-implemented method forexecuting programs in accordance with user-specified constraints, themethod comprising: receiving an indication from a user of one or moreexecution constraints for use in selecting one or more host computingsystems to execute one or more copies of a program, the one or moreexecution constraints being based on at least one of locations of theone or more computing systems and of capabilities of the one or morecomputing systems related to executing the one or more program copies,at least one of the one or more execution constraints being based on oneor more indicated degrees of proximity between one or more indicatedtarget computing resources and the one or more host computing systemsselected to execute the one or more program copies; automaticallydetermining one or more candidate host computing systems that areavailable to execute the one or more program copies in accordance withthe one or more execution constraints, the determined candidate hostcomputing systems being selected from a predefined group of multipledistributed computing systems for use in executing programs of users ofa program execution service and each having a proximity to at least oneof the indicated target computing resources that satisfies at least oneof the indicated degrees of proximity, the automatic determining beingperformed by a configured computing system; automatically selecting theone or more host computing systems to execute the one or more programcopies from the candidate host computing systems, such that each of theselected one or more host computing systems is to execute at least oneof the one or more program copies, the automatic selecting beingperformed by the configured computing system; and initiating executionof the one or more program copies on the selected one or more hostcomputing systems.
 3. The method of claim 2 wherein the multiplecomputing systems of the predefined group are inter-connected usingmultiple data exchange mediums, and wherein a degree of proximitybetween two computing systems is based at least in part on one or moredata exchange mediums that connect the two computing systems.
 4. Themethod of claim 3 wherein the one or more degrees of proximity eachcorrespond to at least one of multiple connection-based proximitylevels, the connection-based proximity levels including a levelcorresponding to multiple programs executing on a single computingsystem that share a data exchange medium within the single computingsystem, a level corresponding to a group of multiple computing systemsconnected by a switch-based data exchange medium, a level correspondingto a group of multiple switched groups of computing systems connected bya router-based data exchange medium, a level corresponding to a group ofcomputing systems of a computing data center connected by a local areanetwork of the data center, a level corresponding to multiplegeographically proximate computing data centers connected by one or morededicated high-speed data connections, and a level corresponding tomultiple geographically distributed computing data centers connected byan internet.
 5. The method of claim 4 wherein the connection-basedproximity levels are hierarchically organized, and wherein the at leastone execution constraint indicates a range of one or more of theproximity levels.
 6. The method of claim 1 wherein the one or moreindicated target computing resources are computing systems that executeone or more indicated programs and/or that store one or more indicatedgroups of data.
 7. The method of claim 2 wherein at least one of the oneor more execution constraints is based on a relative location of each ofthe one or more host computing systems with respect to one or moreindicated target computing resources, such that the candidate hostcomputing systems are each selected based at least in part on a relativelocation of the candidate host computing system with respect to at leastone of the indicated target computing resources, wherein the indicationfrom the user further includes an indication of the program for whichthe one or more copies are to be executed and to execute multiple copiesof the indicated program, and wherein the one or more indicated targetcomputing resources are computing systems that each execute at least onecopy of the indicated program.
 8. The method of claim 2 wherein the oneor more program copies include multiple copies, wherein the at least oneexecution constraints is based on a relative location of each of the oneor more host computing systems with respect to the one or more indicatedtarget computing resources, the relative location being based on a rangeof multiple degrees of proximity between the indicated target computingresources and the one or more host computing systems that execute themultiple program copies, wherein the determined one or more candidatehost computing systems include multiple candidate host computing systemshave differing degrees of proximity within the range to the one or moreindicated target computing resources, and wherein the selecting of theone or more host computing systems from the multiple candidate hostcomputing systems includes selecting host computing systems that have apreferred degree of proximity to the one or more indicated targetcomputing resources.
 9. The method of claim 8 wherein the preferreddegree of proximity is indicated by the user and is one of a degree ofproximity within the range that is most proximate and of a degree ofproximity within the range that is least proximate.
 10. The method ofclaim 2 wherein the one or more program copies include multiple copies,and wherein the one or more execution constraints specify a level ofperformance to be provided by the one or more host computing systems,the specified level of performance including at least one of a minimumdegree of reliability in case of a failure that affects a subset of themultiple executing program copies and of a minimum degree of networkconnectivity performance between the multiple executing program copies,the minimum degree of reliability being based at least in part on themultiple executing program copies being executed on multiple computingsystems having at least an indicated lack of proximity, and the minimumdegree of network connectivity performance being based at least in parton the multiple executing program copies being executed on one or morecomputing systems having at least an indicated degree of proximity. 11.The method of claim 2 wherein the one or more execution constraintsindicate one or more geographical locations of the one or more hostcomputing systems with respect to one or more governmental boundaries.12. The method of claim 2 wherein the one or more execution constraintsindicate one or more capabilities of the one or more computing systemsrelated to executing the one or more program copies.
 13. The method ofclaim 2 further comprising, before the receiving of the indication fromthe user, defining a group of one or more execution constraints based oninstructions received from the user, and wherein the indication from theuser of the one or more execution constraints is based on an indicationof the defined group.
 14. The method of claim 2 wherein at least one ofthe one or more host computing systems each hosts multiple virtualmachines that are each able to execute at least one program, and whereinthe program is a virtual machine image to be executed by at least onevirtual machine hosted by each of the at least one host computingsystems.
 15. The method of claim 2 wherein the configured computingsystem operates on behalf of the program execution service, wherein theprogram is one of multiple programs associated with the programexecution service by customers of the program execution service, themultiple computing systems being used by the program execution serviceto execute the multiple programs on behalf of the customers, and whereinthe method further comprises receiving multiple requests from multipleusers to execute instances of multiple programs, and automaticallyselecting one or more of the multiple computing systems for use witheach of the requests.
 16. A non-transitory computer-readable mediumwhose contents include instructions that when executed configure acomputing system to perform a method, the method comprising: receivingan indication from a user of one or more execution constraints for usein selecting one or more host computing systems to execute one or morecopies of a program on behalf of the user, the one or more executionconstraints being based on at least one of locations of the one or morecomputing systems and of capabilities of the one or more computingsystems related to executing the one or more program copies, at leastone of the one or more execution constraints being based on one or moreindicated degrees of proximity between one or more indicated targetcomputing resources and the one or more host computing systems selectedto execute the one or more program copies; automatically determining oneor more candidate host computing systems that are available to executethe one or more program copies in accordance with the one or moreexecution constraints, the determined candidate host computing systemsbeing selected from a predefined group of multiple distributed computingsystems for use in executing programs of users of a program executionservice and each having a proximity to at least one of the indicatedtarget computing resources that satisfies at least one of the indicateddegrees of proximity, the automatic determining being performed by theconfigured computing system; automatically selecting the one or morehost computing systems to execute the one or more program copies fromthe candidate host computing systems, such that each of the selected oneor more host computing systems is to execute at least one of the one ormore program copies, the automatic selecting being performed by theconfigured computing system; and initiating execution of the one or moreprogram copies on the selected one or more host computing systems. 17.The non-transitory computer-readable medium of claim 16 wherein themultiple computing systems of the predefined group are inter-connectedusing multiple data exchange mediums, and wherein a degree of proximitybetween two computing systems is based at least in part on one or moredata exchange mediums that connect the two computing systems.
 18. Thenon-transitory computer-readable medium of claim 17 wherein the one ormore degrees of proximity each correspond to at least one of multipleconnection-based proximity levels, the connection-based proximity levelsincluding a level corresponding to multiple programs executing on asingle computing system that share a data exchange medium within thesingle computing system, a level corresponding to a group of multiplecomputing systems connected by a switch-based data exchange medium, alevel corresponding to a group of multiple switched groups of computingsystems connected by a router-based data exchange medium, a levelcorresponding to a group of computing systems of a computing data centerconnected by a local area network of the data center, a levelcorresponding to multiple geographically proximate computing datacenters connected by one or more dedicated high-speed data connections,and a level corresponding to multiple geographically distributedcomputing data centers connected by an internet.
 19. The non-transitorycomputer-readable medium of claim 16 wherein the one or more indicatedtarget computing resources are computing systems that execute one ormore indicated programs and/or that store one or more indicated groupsof data.
 20. The non-transitory computer-readable medium of claim 16wherein the one or more program copies include multiple copies, whereinthe at least one execution constraint is based on a relative location ofeach of the one or more host computing systems with respect to the oneor more indicated target computing resources, the relative locationbeing based on a range of multiple degrees of proximity between theindicated target computing resources and the one or more host computingsystems that execute the multiple program copies, wherein the determinedone or more candidate host computing systems include multiple candidatehost computing systems have differing degrees of proximity within therange to the one or more indicated target computing resources, andwherein the selecting of the one or more host computing systems from themultiple candidate host computing systems includes selecting hostcomputing systems that have a preferred degree of proximity to the oneor more indicated target computing resources.
 21. The non-transitorycomputer-readable medium of claim 16 wherein the one or more programcopies include multiple copies, and wherein the one or more executionconstraints indicate at least one of one or more geographical locationsof the one or more host computing systems with respect to one or moregovernmental boundaries, of one or more capabilities of the one or morecomputing systems related to executing the one or more program copies,and of a specified level of performance to be provided by the one ormore host computing systems, the specified level of performanceincluding at least one of a minimum degree of reliability in case of afailure that affects a subset of the multiple executing program copiesand of a minimum degree of network connectivity performance between themultiple executing program copies, the minimum degree of reliabilitybeing based at least in part on the multiple executing program copiesbeing executed on multiple computing systems having at least anindicated lack of proximity, and the minimum degree of networkconnectivity performance being based at least in part on the multipleexecuting program copies being executed on one or more computing systemshaving at least an indicated degree of proximity.
 22. The non-transitorycomputer-readable medium of claim 16 wherein the method furthercomprises, before the receiving of the indication from the user,defining a group of one or more execution constraints based oninstructions received from the user, and wherein the indication from theuser of the one or more execution constraints is based on an indicationof the defined group.
 23. The non-transitory computer-readable medium ofclaim 16 wherein the computer-readable medium is a memory of theconfigured computing system.
 24. A system, comprising: one or moreprocessors of one or more computing systems; and a system managercomponent having software instructions that, when executed by at leastone of the one or more processors, configure at least one of the one ormore computing systems to execute program copies for a user by:receiving an indication from the user of one or more executionconstraints for use in selecting one or more host computing systems toexecute one or more copies of a program, the one or more executionconstraints being based on at least one of locations of the one or morecomputing systems and of capabilities of the one or more computingsystems related to executing the one or more program copies, at leastone of the one or more execution constraints being based on one or moreindicated degrees of proximity between one or more indicated targetcomputing resources and the one or more host computing systems selectedto execute the one or more program copies; automatically determining oneor more candidate host computing systems that are available to executethe one or more program copies in accordance with the one or moreexecution constraints, the determined candidate host computing systemsbeing selected from a predefined group of multiple distributed computingsystems for use in executing programs of users of a program executionservice and each having a proximity to at least one of the indicatedtarget computing resources that satisfies at least one of the indicateddegrees of proximity; automatically selecting the one or more hostcomputing systems to execute the one or more program copies from thecandidate host computing systems, such that each of the selected one ormore host computing systems is to execute at least one of the one ormore program copies; and initiating execution of the one or more programcopies on the selected one or more host computing systems.
 25. Thesystem of claim 24 wherein the multiple computing systems of thepredefined group are inter-connected using multiple data exchangemediums, and wherein a degree of proximity between two computing systemsis based at least in part on one or more data exchange mediums thatconnect the two computing systems.
 26. The system of claim 24 whereinthe one or more indicated target computing resources are computingsystems that at least one of execute one or more indicated programs andof store one or more indicated groups of data.
 27. The system of claim24 wherein the one or more program copies include multiple copies, andwherein the one or more execution constraints indicate one or moregeographical locations of the one or more host computing systems withrespect to one or more governmental boundaries, one or more capabilitiesof the one or more computing systems related to executing the one ormore program copies, and a specified level of performance to be providedby the one or more host computing systems, the specified level ofperformance including at least one of a minimum degree of reliability incase of a failure that affects a subset of the multiple executingprogram copies and of a minimum degree of network connectivityperformance between the multiple executing program copies, the minimumdegree of reliability being based at least in part on the multipleexecuting program copies being executed on multiple computing systemshaving at least an indicated lack of proximity, and the minimum degreeof network connectivity performance being based at least in part on themultiple executing program copies being executed on one or morecomputing systems having at least an indicated degree of proximity. 28.The system of claim 24 further comprising the one or more host computingsystems, at least one of the one or more host computing systems eachhosting multiple virtual machines that are each able to execute at leastone program, and wherein the program is a virtual machine image to beexecuted by at least one virtual machine hosted by each of the at leastone host computing systems.
 29. The system of claim 24 wherein thesystem is part of the program execution service, wherein the program isone of multiple programs associated with the program execution serviceby customers of the program execution service, the multiple computingsystems being used by the program execution service to execute themultiple programs on behalf of the customers, and wherein the systemmanager component consists of a means for performing the executing ofthe program copies for the user, and further for executing programcopies for multiple other users on selected computing systems inresponse to received requests from the multiple other users to executeinstances of multiple programs.